import tkinter as tk
from tkinter import ttk

import serial.tools.list_ports

port_list = list(serial.tools.list_ports.comports())
win = tk.Tk()
win.title(u"StickWatch工具箱")

ttk.Label(win, text="COM Port").grid(column=1, row=0)  # 添加一个标签，并将其列设置为1，行设置为0
ttk.Label(win, text="Enter message:").grid(column=0, row=0)  # 设置其在界面中出现的位置  column代表列   row 代表行


# button被点击之后会被执行
def button_on_click():  # action,该函数则生效
    action.configure(text='Hello ' + name.get())  # 设置button显示的内容
    action.configure(state='disabled')  # 将按钮设置为灰色状态，不可使用状态


# 按钮
action = ttk.Button(win, text="Send!", command=button_on_click)
action.grid(column=2, row=1)  # 设置其在界面中出现的位置  column代表列   row 代表行

# 文本框
name = tk.StringVar()  # StringVar是Tk库内部定义的字符串变量类型，在这里用于管理部件上面的字符；不过一般用在按钮button上。改变StringVar，按钮上的文字也随之改变。
nameEntered = ttk.Entry(win, width=12, textvariable=name)  # 创建一个文本框，定义长度为12个字符长度，并且将文本框中的内容绑定到上一句定义的name变量上，方便clickMe调用
nameEntered.grid(column=0, row=1)
nameEntered.focus()

# 创建一个下拉列表
number = tk.StringVar()
combo = ttk.Combobox(win, width=35, textvariable=number, state="readonly")
combo.grid(column=1, row=1)

if len(port_list) <= 0:
    print("The Serial port can't find!")
else:
    port_str_list = []
    combo_default = 0
    port_index = 0
    for port in port_list:
        print(port)
        port_info = list(port)
        print(port_info)
        port_serial = port_info[0]
        if "M5" in port_info[1]:
            combo_default = port_index
        print(port_serial)
        port_str_list.append(str(port))
        port_index += 1
        # combo["values"].append(str(port_serial))
        # ser = serial.Serial(port_serial, 115200, timeout=60)
        # print("check which port was really used >", ser.name)

    combo["values"] = tuple(port_str_list)
    combo.current(combo_default)


def center_window(w, h):
    # 获取屏幕 宽、高
    ws = win.winfo_screenwidth()
    hs = win.winfo_screenheight()
    # 计算 x, y 位置
    x = (ws / 2) - (w / 2)
    y = (hs / 2) - (h / 2)
    win.geometry('%dx%d+%d+%d' % (w, h, x, y))


center_window(600, 300)

print(tk.TkVersion)

win.mainloop()
